package com.sftz.framework.util;


/**
 * 比较工具
 * 
 */
public class CompareUtil {

	/**
	 * 安全比较(null小)
	 * <p>
	 * 防空指针
	 */
	public static <T extends Comparable<T>> int safeCompareToLt(T o1, T o2) {
		if (null != o1 && null != o2) {
			return o1.compareTo(o2);
		} else {
			return nullCompareLt(o1, o2);
		}
	}

	/**
	 * 安全比较(null大)
	 */
	public static <T extends Comparable<T>> int safeCompareToGt(T o1, T o2) {
		if (null != o1 && null != o2) {
			return o1.compareTo(o2);
		} else {
			return nullCompareGt(o1, o2);
		}
	}

	/**
	 * 两者至少有一个为null的比较(null小)
	 */
	public static int nullCompareLt(Object o1, Object o2) {
		//都为空 返回相等
		if (o1 == null && o2 == null) {
			return 0;
		}
		return (o1 == null) ? -1 : 1;
	}

	/**
	 * 两者至少有一个为null的比较(null大)
	 */
	public static int nullCompareGt(Object o1, Object o2) {
		//都为空 返回相等
		if (o1 == null && o2 == null) {
			return 0;
		}
		return (o1 == null) ? 1 : -1;
	}
}
